iT邦幫忙

2022 iThome 鐵人賽

DAY 16
0
Mobile Development

新手向Android&Kotlin學習紀錄30天系列 第 16

第16天 kotlin小學堂(5) 控制流程 : for loop、while loop

  • 分享至 

  • xImage
  •  

for loop

for loop 相當於C# 等其他語言的foreach循環,對任何提供迭代器(iterator)的對象提供一個歷遍的方式。

  • 他們都提供迭代器:

    • String
    • Range
    • Array
    • Collection
  • 迭代器(iterator)是什麼?

對於遍歷集合(collection)元素, Kotlin 標準庫支持迭代器的常用機制—對象可按順序提供對元素的訪問權限,而不會暴露集合的底層結構。當需要逐個處理集合的所有元素(例如打印值或對其進行類似更新)時,迭代器非常有用。
Iterable接口的繼承者(包括 Set 與 List)可以通過調用 iterator() 函數獲得迭代器。一旦獲得迭代器它就指向集合的第一個元素;調用 next() 函數將返回此元素,並將迭代器指向下一個元素(如果下一個元素存在)。一旦迭代器通過了最後一個元素,它就不能再用於檢索元素;也無法重新指向到以前的任何位置。要再次遍歷集合,請創建一個新的迭代器。引自kotlin中文站

for loop語法

for(i in collection){ //對當下的i要做的事 }

對於String類型歷遍:

    val str :String = "hello"
    for(i in str ) print(i.uppercase()) //變大寫,單行程式碼時花括號{}可寫可不寫
     //結果:HELLO          

對於Range的歷遍:

由小到大的升序區間使用的是..運算子,下例表示調用1.rangeTo(3)

for(i in 1 .. 3) print("$i ")
    //結果 : 1 2 3 

range不含最後一個數:使用until

for(i in 1 until 3) print("$i ")
    //結果 : 1 2  

降序區間 :

for(i in 3 downTo 1) print("$i ") 
     //結果 : 3 2 1

透過自訂step ,取等差區間:

    //Char類型也可以   
    for(i in 'a'.. 'h' step 2) print("$i ")
        //從a到不超過h的範圍取值
        //結果 : a c e g    

降序等差區間:

for(i in 10 downTo 0 step 3){print("$i ")}
    //從10到不小於0的範圍取值
    //結果 : 10 7 4 1 

除了step 也可以使用filter這樣做來篩選需要的元素:

print((1..10).filter{i % 3 == 0 //被3整除的元素 })
    //結果: [3, 6, 9]

Collection 、Array 歷遍

除了用在區間,當然使用在 Array 或 List 或 Set 等集合類都是可以的,集合我們之後可以再開一篇(老高語氣)

fun main() {
    val list = listOf<Int>(1, 2, 3, 4)
    for(i in list) print(i)
    println()
    val set = setOf<Int>(1, 1, 2, 3, 4, 5)
    for (i in set) print(i)
    println()
    val array = arrayOf(3,4,5)
    for(i in array ) print ("${i*i} ")
    
}
//結果: 1234
//     12345
//     9 16 25    

while loop

while跟do-while語句在滿足條件時執行,而do-while至少會執行一次。while loop要注意一定要設定結束的機制,不然條件永遠成立的情況下,您的迴圈就會變成傳說中的無限列車迴圈,下一站:終點-程式崩潰站。

while語法

while(條件){ 
    //條件成立執行程式碼
    //設置結束迴圈的機制
    }   

例:
每循環一次都要遞減朝向結束條件接近,依本例 : 當x值小於等於0的時候這個迴圈就會停止,而每次遞減多少可自訂,如 : x-= 2。

fun main() {
    var x = 10
    while (x > 0) { //x值大於0會執行,換句話說x值小於等於0不會執行
        print("$x ")
        x-- 
    }
}

do-while語法

do-while會在不經條件判斷的情況下,先執行一次{}內的程式碼一次,然後才會判斷條件符合,才會執行第二次,直到條件判斷為false。

do {
      // 要執行的程式碼
     //設置結束迴圈的機制
}while(執行條件)

例,印個數字3的九九乘法表:

fun main() {
    val num = 3
    var i = 1

    do {
        println("3 * $i = "+ num * i) 
        i++
    }while(i < 10) //i值大於等於10就不會再次執行
}
                  
/*結果:
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27 */               

今天就到這,明天見


上一篇
第15天 kotlin小學堂(4) 控制流程 : if/else 、 when
下一篇
第17天 kotlin小學堂(6) 控制流程 : 跳脫字元
系列文
新手向Android&Kotlin學習紀錄30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言